use std::io::Result; // 用于处理I/O操作的Result类型
/**
 * 编解码缓冲读
 *
 * Java中的接口在Rust中通常用trait表示
 */
///
/// # Author
/// noear
///
/// # Version
/// since 2.0
pub trait CodecReader {
    /**
     * 获取 byte
     *
     * Java的byte对应Rust的u8
     */
    fn get_byte(&mut self) -> Result<u8>;

    /**
     * 获取一组 byte
     *
     * 使用Rust的slice来传递数组和长度
     */
    fn get_bytes(&mut self, dst: &mut [u8], offset: usize, length: usize) -> Result<()>;

    /**
     * 获取 int
     *
     * Java的int对应Rust的i32
     */
    fn get_int(&mut self) -> Result<i32>;

    /**
     * 预看 byte
     *
     * 类似于get_byte，但不改变读取位置
     */
    fn peek_byte(&self) -> Result<u8>;

    /**
     * 跳过
     *
     * 跳过指定数量的字节
     */
    fn skip_bytes(&mut self, length: usize) -> Result<()>;

    /**
     * 剩余长度
     *
     * 获取剩余可读的字节数
     */
    fn remaining(&self) -> Result<usize>;

    /**
     * 当前位置
     *
     * 获取当前的读取位置
     */
    fn position(&self) -> Result<usize>;
}